#include <iostream>
#include <string>
#include <vector>
#include <chrono>
#include <sw/redis++/redis++.h>
#include "../util.hpp"
using namespace std::chrono_literals;	// 字面量
using sw::redis::Redis;

void test1(Redis& redis){
    redis.flushall();

    redis.zadd("key", {std::make_pair("a", 98), std::make_pair("b", 97)});
 
    // 使用容器批量添加成员及其分数
    std::vector<std::pair<std::string, double>> members = {
        std::make_pair("c", 95),
        std::make_pair("d", 93)
    };
    redis.zadd("key", members.begin(), members.end());

    // 获取所有成员
    std::vector<std::string> membersResults;
    redis.zrange("key", 0, -1, std::back_inserter(membersResults));
    printContainer(membersResults);

    // 获取并打印成员 c 的分数
    auto score = redis.zscore("key", "c");
    if (score) {
        std::cout << "score: " << score.value() << std::endl;
    } else {
        std::cout << "score 无效" << std::endl;
    }

    // 获取并打印所有成员及其分数
    std::vector<std::pair<std::string, double>> membersWithScore;
    redis.zrange("key", 0, -1, std::back_inserter(membersWithScore));
    printContainerPair(membersWithScore);
}

void test2(Redis& redis){
    redis.flushall();
    redis.zadd("key", {std::make_pair("a", 98), std::make_pair("b", 97)});

    std::cout << "key 的成员数量: " << redis.zcard("key") << std::endl;
    std::cout << "a 是否存在: " << redis.zscore("key", "a").has_value() << std::endl;
    redis.zrem("key", "b");
    std::cout << "删除 b 后, b 是否存在: " << redis.zscore("key", "b").has_value() << std::endl;
}

int main(){
    sw::redis::Redis redis("tcp://127.0.0.1:6379");
    // 如果 Redis 设置了密码，请在这里添加认证
    redis.auth("123456");  // 替换 Redis 密码
    // 测试函数
    test2(redis);
    return 0;
}